package exercise02;

/**
 * @author shkstart
 * @date 2022/4/21 - 22:23
 */
public class ArrayExercise {
    public static void main(String[] args) {
        Student[] stus = new Student[20];
        //String[] arr = new String[10]; 其实String也算是个对象数组
        //只是我们习惯了，Student也一样。数组的元素可以是任何数据类型
        //也包括我们自定义的类Student
        for(int i = 0; i < stus.length; i++) {
            stus[i] = new Student();
            stus[i].number = i + 1;
            stus[i].score = (int)(Math.random()* (100 -0 + 1) + 0);
            stus[i].state = (int)(Math.random()* (6 - 1 + 1) + 1);
//            if(stus[i].state == 3) {
//                System.out.println( stus[i].state +" " + stus[i].number + " " + stus[i].score  );
//            }//我的做法是把if直接放在首次for循环对象属性赋值中去遍历,其实差不多。
        }

        for(int i = 0; i < stus.length; i++ ) {
            System.out.println(stus[i].info());
        }//老师遍历对象数组做法
        System.out.println("*******************************");
        //问题一：打印出3年级(state值为3）的学生信息。
        for(int i = 0; i < stus.length; i++) {
            if(stus[i].state == 3) {
                System.out.println(stus[i].info());
            }
        }


            System.out.println();
       //问题二：使用冒泡排序按学生成绩排序，并遍历所有学生信息
        for (int i = 0; i < stus.length - 1; i++ ) {
            for (int j = 0; j < stus.length - 1 - i; j++) {
                if (stus[j].score > stus[j + 1].score) {
                    //如果需要换序，交换的是数组的元素：Student对象！！！！！！！！！！！！
                    Student temp = stus[j];
                    stus[j] = stus[j + 1];
                    stus[j + 1] = temp;
//                我一开始是交换数组的对象.属性 谨记i！！！！！！！！！！ 还有定义临时变量时要用你对象数组那个类
                }
            }
        }
        System.out.println("*******************************");
        for(int i = 0; i < stus.length; i++ ) {
            System.out.println(stus[i].info());
        }


    }
}

class Student{
    int number;
    int state;
    int score;

    //造方法，老师遍历对象数组做法
    public String info() {
        return "学号 " + number + "，年极" + state + ",成绩" + score;
    }
}


